package com.ruoyi.datastatistics.mapper;


import com.ruoyi.basedata.domain.MeterSheets;
import com.ruoyi.datastatistics.vo.*;
import org.apache.ibatis.annotations.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 主页相关Mapper
 *
 * @author TsingYu
 * @version 2.0
 * @date 2024/6/24 16:23
 */
@Mapper
public interface HomepageMapper {
    /**
     * 统计当前用户绑定小表数量
     *
     * @param map 条件
     * @return 小表数量
     */
    int countXbQty(Map<String, Object> map);

    /**
     * 统计小表绑定的用户数量
     *
     * @param map 条件
     * @return 用户数量
     */
    List<Map<String, Object>> countAccountsXb(Map<String, Object> map);

    /**
     * 分区域统计小表昨日、上月用水量
     *
     * @param map 条件
     * @return 用水量
     */
    List<Map<String, Object>> statisticUsageXb(Map<String, Object> map);

    /**
     * 分区域统计集中器数量
     *
     * @param map 条件
     * @return 集中器数量
     */
    List<Map<String, Object>> countConcentratorXb(Map<String, Object> map);

    /**
     * 分区域统计采集器数量
     *
     * @param map 条件
     * @return 采集器数量
     */
    List<Map<String, Object>> countCollectorXb(Map<String, Object> map);

    /**
     * 统计小表、大表每日抄回数
     *
     * @param map 条件
     * @return 小表、大表每日抄回数
     */
    List<CopyVO> statisticCopy(Map<String, Object> map);

    /**
     * 统计小表指定时间段的日用量
     *
     * @param map 条件
     * @return 小表指定时间段的日用量
     */
    List<UsageVO> statisticUsageByDayXb(Map<String, Object> map);

    /**
     * 统计小表指定时间段的月用量
     *
     * @param map 条件
     * @return 小表指定时间段的月用量
     */
    List<UsageVO> statisticUsageByMonthXb(Map<String, Object> map);

    /**
     * 统计小表预警数量
     *
     * @param map 条件
     * @return 小表预警数量
     */
    List<Map<String, Object>> statisticWarnXb(Map<String, Object> map);


    /**
     * 根据表型号统计小表数
     *
     * @param map 条件
     * @return 小表预警数量
     */
    List<XbTypeStatisticVO> statisticTypeXb(Map<String, Object> map);

    /**
     * 统计小表昨日用量前N的设备
     *
     * @param map 条件
     * @return 小表昨日用量前N的设备
     */
    List<DbUsageVO> statisticXbUsageTopN(Map<String, Object> map);

    /**
     * 统计小表前days天的日用量
     *
     * @param map 条件
     * @return 小表前days天的日用量
     */
    List<UsageVO> statisticUsageByPreviousDaysXb(Map<String, Object> map);

    /**
     * 统计当前用户绑定大表数量
     *
     * @param map 条件
     * @return 大表数量
     */
    int countDbQty(Map<String, Object> map);

    /**
     * 统计大表绑定的用户数量
     *
     * @param map 条件
     * @return 用户数量
     */
    int countAccountsDb(Map<String, Object> map);

    /**
     * 统计大表昨日、上月用水量
     *
     * @param map 条件
     * @return 用水量
     */
    BigDecimal statisticUsageDb(Map<String, Object> map);

    /**
     * 查找大表在线设备数量
     *
     * @param map 条件
     * @return 在线设备数量
     */
    int countOnlineDb(Map<String, Object> map);

    /**
     * 统计大表昨日预警数量
     *
     * @param map 条件
     * @return 在线设备数量
     */
    List<Map<String, Object>> statisticWarnDb(Map<String, Object> map);

    /**
     * 统计大表昨日用量前10的设备
     *
     * @param map 条件
     * @return 大表昨日用量前10的设备
     */
    List<DbUsageVO> statisticDbUsageTop10(Map<String, Object> map);

    /**
     * 统计大表昨日夜间小流前10的设备
     *
     * @param map 条件
     * @return 大表昨日夜间小流前10的设备
     */
    List<DbUsageVO> statisticNightMinFlowTop10(Map<String, Object> map);

    /**
     * 统计大表指定时间段的日用量
     *
     * @param map 条件
     * @return 大表指定时间段的日用量
     */
    List<UsageVO> statisticUsageByDayDb(Map<String, Object> map);

    /**
     * 统计大表前days天的日用量
     *
     * @param map 条件
     * @return 大表前days天的日用量
     */
    List<UsageVO> statisticUsageByPreviousDaysDb(Map<String, Object> map);

    /**
     * 统计大表指定时间段的月用量
     *
     * @param map 条件
     * @return 大表指定时间段的月用量
     */
    List<UsageVO> statisticUsageByMonthDb(Map<String, Object> map);

    /**
     * 查找区域信息
     *
     * @param map map
     * @return 区域信息
     */
    List<MeterSheets> selectSheets(Map<String, Object> map);

    /**
     * 分区域统计当前用户绑定小表数量
     *
     * @param map 条件
     * @return 小表数量
     */
    List<Map<String, Object>> countXbQtyGroupBySheetsId(Map<String, Object> map);

    /**
     * 分区域统计当前用户绑定大表数量
     *
     * @param map 条件
     * @return 大表数量
     */
    List<Map<String, Object>> countDbQtyGroupBySheetsId(Map<String, Object> map);


    /**
     * 分区域统计当前区域内小表读数总和与最新读取时间
     *
     * @param map 条件
     * @return 当前区域内小表读数总和与最新读取时间
     */
    List<Map<String, Object>> statisticXbReadNumAndTime(Map<String, Object> map);

    /**
     * 所有大表设备
     *
     * @param map 条件
     * @return 符合条件的所有大表设备
     */
    List<Map<String, Object>> selectTerminals(Map<String, Object> map);

    /**
     * 获取昨日户表区域日用水量排名前五的区域
     *
     * @param map 条件
     * @return 昨日区域户表日用水量排名前五的区域
     */
    List<YesterdayAreaDosageVO> yesterdayAreaTop5ForDosageXb(Map<String, Object> map);
}
